﻿using Pe.Petecos.Comercial.Aplicacion.Core.Base;
using Pe.Petecos.Comercial.Aplicacion.Core.ServiceContract;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Ventas;
using Pe.Petecos.Comercial.Cross.Core.Constantes;
using Pe.Petecos.Comercial.Presentacion.Core.Controllers.Base;
using Pe.Petecos.Comercial.Presentacion.Core.Security;
using Pe.Petecos.Comercial.Presentacion.Core.ViewModel.Ventas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace Pe.Petecos.Comercial.Presentacion.Core.Controllers.Ventas
{
    public class AdministrarGastoPersonalProyectoController : GenericController
    {
        public IGeneralService generalService { get; set; }
        public IVentasService ventasService { get; set; }

        #region Action
        /// /// <summary>
        /// Muestra la vista principal
        /// </summary>
        /// <returns>Vista principal de la opción</returns>
        public ActionResult Index()
        {
            var resultEstados = generalService.BuscarOpcion(DatosConstantes.Parametro.EstadoGastoPersonalProyecto).Result;
            var resultTipos = generalService.BuscarOpcion(DatosConstantes.Parametro.TipoGastoPersonalProyecto).Result;

            var model = new AdministrarGastoPersonalProyectoBusquedaModel(resultEstados,resultTipos);

            return View(model);
        }

        #endregion

        #region Vistas Parciales
        /// <summary>
        /// Muestra el formulario de datos
        /// </summary>
        /// <returns>Vista FormularioRegistro</returns>
        public ActionResult FormularioRegistro(int codigo)
        {
            var tiposGastoPersonalProyecto = generalService.BuscarOpcion(DatosConstantes.Parametro.TipoGastoPersonalProyecto).Result;
            var monedas = generalService.BuscarOpcion(DatosConstantes.Parametro.Moneda).Result;
            var modelo = new AdministrarGastoPersonalProyectoRegistroModel(tiposGastoPersonalProyecto, monedas);

            if (codigo > 0)
            {
                var evento = ventasService.ObtenerGastoPersonalProyecto(codigo).Result;
                modelo.GastoPersonalProyecto = evento;
            }

            return View(modelo);
        }

        #endregion

        #region Json

        public JsonResult Buscar(FiltroGastoPersonalProyecto filtro)
        {
            var resultado = ventasService.BuscarGastoPersonalProyecto(filtro);
            return Json(resultado);
        }

        public JsonResult Registrar(DataGastoPersonalProyecto evento)
        {
            var currentAccount = HttpSessionContext.CurrentAccount();
            evento.UsuarioCreacion = currentAccount.Cuenta;
            evento.UsuarioModificacion = currentAccount.Cuenta;

            var resultado = ventasService.RegistrarGastoPersonalProyecto(evento);
            return Json(resultado);
        }

        public JsonResult Anular(List<int> codigos)
        {
            var currentAccount = HttpSessionContext.CurrentAccount();

            var resultado = ventasService.ModificarEstadoGastoPersonalProyecto(codigos, DatosConstantes.EstadoGastoPersonalProyecto.Eliminado, currentAccount.Cuenta);
            return Json(resultado);
        }

        //public JsonResult PreAprobar(List<int> codigos)
        //{
        //    ProcessResult<List<int>> resultado = new ProcessResult<List<int>>();

        //    var currentAccount = HttpSessionContext.CurrentAccount();

        //    if (currentAccount.CodigoPerfil == DatosConstantes.Perfil.Administrador || currentAccount.CodigoPerfil == DatosConstantes.Perfil.PreAprobador)
        //    {
        //        resultado = ventasService.ModificarEstadoGastoPersonalProyecto(codigos, DatosConstantes.EstadoGastoPersonalProyecto.PreAprobado, currentAccount.Cuenta);
        //    }
        //    else
        //    {
        //        resultado.CodeResult = -1;
        //    }


        //    return Json(resultado);
        //}

        public JsonResult Aprobar(List<int> codigos)
        {

            ProcessResult<List<int>> resultado = new ProcessResult<List<int>>();

            var currentAccount = HttpSessionContext.CurrentAccount();

            if (currentAccount.CodigoPerfil == DatosConstantes.Perfil.Administrador || currentAccount.CodigoPerfil == DatosConstantes.Perfil.Aprobador)
            {
                resultado = ventasService.ModificarEstadoGastoPersonalProyecto(codigos, DatosConstantes.EstadoGastoPersonalProyecto.Aprobado, currentAccount.Cuenta);
            }
            else
            {
                resultado.CodeResult = -1;
            }

            return Json(resultado);
        }

        public JsonResult Confirmar(List<int> codigos)
        {

            ProcessResult<List<int>> resultado = new ProcessResult<List<int>>();

            var currentAccount = HttpSessionContext.CurrentAccount();

            if (currentAccount.CodigoPerfil == DatosConstantes.Perfil.Administrador || currentAccount.CodigoPerfil == DatosConstantes.Perfil.Aprobador)
            {
                resultado = ventasService.ModificarEstadoGastoPersonalProyecto(codigos, DatosConstantes.EstadoGastoPersonalProyecto.Confirmado, currentAccount.Cuenta);
            }
            else
            {
                resultado.CodeResult = -1;
            }

            return Json(resultado);
        }

        //public JsonResult Aceptar(List<int> codigos)
        //{

        //    ProcessResult<List<int>> resultado = new ProcessResult<List<int>>();

        //    var currentAccount = HttpSessionContext.CurrentAccount();

        //    if (currentAccount.CodigoPerfil == DatosConstantes.Perfil.Administrador)
        //    {
        //        resultado = ventasService.ModificarEstadoGastoPersonalProyecto(codigos, DatosConstantes.EstadoGastoPersonalProyecto.Aceptado, currentAccount.Cuenta);
        //    }
        //    else
        //    {
        //        resultado.CodeResult = -1;
        //    }

        //    return Json(resultado);
        //}

        //public JsonResult Copiar(int codigo)
        //{
        //    var currentAccount = HttpSessionContext.CurrentAccount();
        //    var cuenta = currentAccount.Cuenta;
        //    var resultado = ventasService.CopiarGastoPersonalProyecto(codigo, cuenta);
        //    return Json(resultado);
        //}

        #endregion
    }
}
